package com.eva.framework.security.prevent;

import com.eva.framework.config.enums.ApiModeEnum;

import java.lang.annotation.*;

/**
 * 防重复注解
 * 防重复逻辑：默认情况下，记录请求地址、登录令牌和请求IP作为请求区分的因子，只有三者相同才视为是同一请求
 */
@Inherited
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface PreventRepeat {

    /**
     * 防重复处理器
     * 可以根据不同的场景添加不同的处理器
     */
    Class<?> handler() default PreventRepeatDefaultHandler.class;

    /**
     * 间隔时间(ms)，在此时间再次被调用视为重复调用
     */
    int interval() default 800;

    /**
     * 错误消息
     */
    String message() default "请求过于频繁";

    /**
     * 支持的接口模式
     * v5.1.0新增
     * 默认为所有模式，所有接口模式均会进行验证
     * 指定时，仅在指定的模式下才生效，例如发送短信验证码的防止重复可以在生产模式下才生效，则测试阶段不会进行防重复验证
     */
    ApiModeEnum mode() default ApiModeEnum.all;

}
